// 引入ASP.NET Core MVC控制器相关命名空间
using Microsoft.AspNetCore.Mvc;

namespace Rabbit3.Api.Controllers
{
    /// <summary>
    /// 天气预报控制器 - ASP.NET Core模板生成的示例控制器
    /// 用于演示API的基本功能和结构
    /// </summary>
    [ApiController] // 标识这是一个API控制器，自动处理模型验证和错误响应
    [Route("[controller]")] // 设置路由前缀为 WeatherForecast
    public class WeatherForecastController : ControllerBase
    {
        // 天气描述词汇数组，用于随机生成天气摘要
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        // 日志记录器，用于记录操作日志和错误信息
        private readonly ILogger<WeatherForecastController> _logger;

        /// <summary>
        /// 构造函数 - 通过依赖注入初始化控制器
        /// </summary>
        /// <param name="logger">日志记录器实例</param>
        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            // 初始化日志记录器
            _logger = logger;
        }

        /// <summary>
        /// 获取天气预报数据 - 生成5天的模拟天气数据
        /// </summary>
        /// <returns>包含5天天气预报的数组</returns>
        [HttpGet(Name = "GetWeatherForecast")] // HTTP GET请求，路径为 WeatherForecast
        public IEnumerable<WeatherForecast> Get()
        {
            // 生成1到5的数字序列，为每一天创建天气预报对象
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                // 设置日期为当前日期加上索引天数
                Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                // 随机生成-20到55摄氏度之间的温度
                TemperatureC = Random.Shared.Next(-20, 55),
                // 从天气描述数组中随机选择一个描述
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray(); // 转换为数组返回
        }
    }
}
